package org.algorithm.kmp;

public class ViolenceMatch {

    public static void main(String[] args) {
        String str = "vueGit: http://git.fengxiaomi.com/liweiyu/web-service.git";
        String subStr = "fengxiaomi";
        int i = violenceMatchWhile(str, subStr);
        int i1 = violenceMatchFor(str, subStr);

        System.out.println(i1);
        System.out.println(i);
    }

    /**
     * 自己设计的暴力匹配，相对来说比较简单
     * 再次理解，其实和老师的差不多，虽然是用for，但是原理一样，具体i和j是否需要增加是需要判断的，因此用for不那么合适
     *
     * @param str
     * @param subStr
     * @return i-j，已匹配成功，返回成功的开始索引，否则返回-1
     */
    public static int violenceMatchFor(String str, String subStr) {
        int j = 0;
        for (int i = 0; i < str.length(); ) {

            if (str.charAt(i) == subStr.charAt(j)) {
                i++;
                j++;
            } else {
                i = i - j + 1;
                j = 0;
            }

            if (j == subStr.length() - 1) {
                return i - j;
            }
        }
        return -1;
    }

    /**
     * 这个相对可能完成都更高
     * @param str
     * @param subString
     * @return
     */
    public static int violenceMatchWhile(String str, String subString) {
        char[] strC = str.toCharArray();
        char[] subC = subString.toCharArray();
        int strLen = strC.length;
        int subLen = subC.length;
        int i = 0, j = 0;
        while (i < strLen && j < subLen) {
            if (strC[i] == subC[j]) {
                i++;
                j++;
            } else {
                i = i - j + 1;
            }

            if (j == (subLen - 1)) {
                return i - j;
            }
        }
        return -1;
    }

}
